﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using log4net;
using TheBullysStore.Models.ModuloServicios.MantenimientoPreventivo;

namespace TheBullysStore.Models.ModuloServicios
{
    public class MantenimientoPreventivoDAO
    {
        private static ILog log = LogManager.GetLogger(typeof(MantenimientoPreventivoDAO));
        public string RegistrarMantenimientoPreventivo(MantenimientoPreventivoBean mantenimientoPreventivo)
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);
                sqlCon.Open();

                    string commandString = "INSERT INTO mantenimiento_preventivo (Fecha, Descripcion, estado, monto, id_contrato_preventivo, id_mantenible, id_edificio, hora) VALUES" +
                                                                                "(convert(datetime,'" + mantenimientoPreventivo.Fecha + "',103), '" + mantenimientoPreventivo.Descripcion + "', 1, " + mantenimientoPreventivo.Costo + ", " + mantenimientoPreventivo.IdContratoPreventivo + "," + mantenimientoPreventivo.IdMantenible + "," + mantenimientoPreventivo.IdEdificio + ", '" + mantenimientoPreventivo.Hora + "')";

                    System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + commandString);

                    SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                    sqlCmd.ExecuteNonQuery();
                sqlCon.Close();
                mantenimientoPreventivo.Conexion = "Bien";

            }

            catch(Exception ex)
            {
                mantenimientoPreventivo.Conexion = "Mal";
                log.Error("RegistrarMantenimientoPreventivo(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
            return mantenimientoPreventivo.Conexion;
        }


        public List<MantenimientoPreventivoBean> ListarMantenimientoPreventivo(MantenimientoPreventivoBean mantenimientoPreventivo)
        {
            SqlConnection sqlCon = null;
            try
            {
                List<MantenimientoPreventivoBean> listaMantenimientosPreventivos = new List<MantenimientoPreventivoBean>();

                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);
                sqlCon.Open();


                string commandString = "select mp.id_mantenimiento_preventivo, m.id_mantenible, m.Nombre, mp.id_contrato_preventivo, p.id_proveedor, p.RazonSocial, mp.Fecha, mp.descripcion, mp.monto " +
                                       "from mantenimiento_preventivo mp, mantenible m, contrato_preventivo cp, proveedor p, contrato_x_mantenible cxm, edificio e " +
                                       "where p.RazonSocial like '" + mantenimientoPreventivo.NombreProveedor + "%' and mp.id_contrato_preventivo = cp.id_contrato_preventivo " +
                                       "and cp.id_proveedor = p.id_proveedor and cp.id_contrato_preventivo = cxm.id_contrato_preventivo " +
                                       "and m.id_mantenible = cxm.id_mantenible and mp.estado = 1 and mp.id_mantenible = m.id_mantenible and e.id_Edificio = mp.id_edificio and e.Nombre like '%" + mantenimientoPreventivo.NombreEdificio + "%'";

                if (mantenimientoPreventivo.IdMantenible > 0) {
                    commandString += "and  m.id_mantenible = " + mantenimientoPreventivo.IdMantenible;
                }

                if (!string.IsNullOrEmpty(mantenimientoPreventivo.FechaInicio)) {
                    commandString += " AND fecha BETWEEN convert(datetime,'" + mantenimientoPreventivo.FechaInicio + "',103)"
                                   + " AND convert(datetime,'" + mantenimientoPreventivo.FechaFin + "',103)";
                }

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                SqlDataReader dataReader = sqlCmd.ExecuteReader();

                while (dataReader.Read())
                {
                    MantenimientoPreventivoBean mantenimientoPreventivoB = new MantenimientoPreventivoBean();
                    mantenimientoPreventivoB.IdMantenimientoPreventivo = (int)dataReader[0];
                    mantenimientoPreventivoB.IdMantenible = (int)dataReader[1];
                    mantenimientoPreventivoB.NombreMantenible = (string)dataReader[2];
                    mantenimientoPreventivoB.IdContratoPreventivo = (int)dataReader[3];
                    mantenimientoPreventivoB.IdProveedor = (int)dataReader[4];
                    mantenimientoPreventivoB.NombreProveedor = (string)dataReader[5];
                    mantenimientoPreventivoB.Fecha = ((DateTime)dataReader[6]).ToString("dd/MM/yyyy");
                    mantenimientoPreventivoB.Descripcion = (string)dataReader[7];
                    mantenimientoPreventivoB.Costo = Convert.ToDouble(dataReader[8]);

                    listaMantenimientosPreventivos.Add(mantenimientoPreventivoB);
                }
                dataReader.Close();
                sqlCon.Close();

                return listaMantenimientosPreventivos;
            }
            catch (Exception ex)
            {
                log.Error("ListarMantenimientoPreventivo(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
        }

        public string modificarMantenimiento(MantenimientoPreventivoBean mantenimientoPreventivo)
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "update mantenimiento_preventivo set " +
                                       "Fecha = convert(datetime, '" + mantenimientoPreventivo.Fecha + "',103) , " +
                                       "Descripcion = '" + mantenimientoPreventivo.Descripcion + "', " +
                                       "monto = " + Convert.ToDouble(mantenimientoPreventivo.Costo) + " " +
                                       "where id_mantenimiento_preventivo = " + mantenimientoPreventivo.IdMantenimientoPreventivo;

                //System.Diagnostics.Debug.WriteLine("--------------------------------------_________MIERDA> " + commandString);

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);

                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                mantenimientoPreventivo.Conexion = "Bien";

            }
            catch (Exception ex)
            {
                log.Error("modificarMantenimiento(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
            return mantenimientoPreventivo.Conexion;
        }


        public string eliminarMantenimientoPreventivo(MantenimientoPreventivoBean mantenimiento)
        {
            SqlConnection sqlCon = null;
            try
            {
                String cadenaConfiguracion = ConfigurationManager.ConnectionStrings["TheBullysStore"].ConnectionString;

                sqlCon = new SqlConnection(cadenaConfiguracion);

                sqlCon.Open();

                string commandString = "UPDATE mantenimiento_preventivo SET estado = 0 WHERE id_mantenimiento_preventivo = " + mantenimiento.IdMantenimientoPreventivo;

                SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
                sqlCmd.ExecuteNonQuery();

                sqlCon.Close();

                mantenimiento.Conexion = "Bien";
            }
            catch (Exception ex)
            {
                log.Error("eliminarMantenimientoPreventivo(EXCEPTION): ", ex);
                throw ex;
            }
            finally
            {
                sqlCon.Close();
            }
            return mantenimiento.Conexion;
        }
    }
}